home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1996 #6 / Amiga Plus CD - 1996 - No. 06.iso / pd / programmierung / programmers / examples / example2.c < prev    next >
C/C++ Source or Header  |  1996-06-23  |  3KB  |  103 lines

  1. /* This program loads a module, and plays it. Uses medplayer.library,
  2.    octaplayer.library and octamixplayer.library, if required. Could be
  3.    used as a small simple replacement of OctaMEDPlayer. */
  4.  
  5. #include <exec/types.h>
  6. #include <libraries/dos.h>
  7. #include <proto/exec.h>
  8. #include <proto/dos.h>
  9. #include <stdio.h>
  10. /* These two must be included in this order. */
  11. #include "libproto.h"
  12. #include "proplayer.h"
  13.  
  14. void main(int argc,char *argv[])
  15. {
  16.     struct MMD0 *sng;
  17.     struct Library *MEDPlayerBase = NULL,*OctaPlayerBase = NULL,
  18.         *OctaMixPlayerBase = NULL;
  19.     LONG play_routine;
  20.     if(argc < 2) {
  21.         printf("Usage: example2 <song>\n");
  22.         return;
  23.     }
  24.     /* Assume 4-ch mode (medplayer.library)
  25.        We use V7 to obtain RequiredPlayRoutine */
  26.     MEDPlayerBase = OpenLibrary("medplayer.library",7);
  27.     if(!MEDPlayerBase) {
  28.         printf("Can't open medplayer.library!\n");
  29.         return;
  30.     }
  31.     printf("Loading...\n");
  32.     sng = LoadModule(argv[1]);
  33.     if(!sng) {
  34.         printf("Load error (DOS error #%d).\n",IoErr());
  35.         goto exit;
  36.     }
  37.     /* Test which play routine is required... */
  38.     play_routine = RequiredPlayRoutine(sng);
  39.     if(play_routine > 2) {
  40.         printf("Requires an unknown playing routine!\n");
  41.         goto exit;
  42.     }
  43.     switch(play_routine) {
  44.     case 1:    // octaplayer.library...
  45.         OctaPlayerBase = OpenLibrary("octaplayer.library",0);
  46.         if(!OctaPlayerBase) {
  47.             printf("Can't open octaplayer.library!\n");
  48.             goto exit;
  49.         }
  50.         break;
  51.     case 2: // octamixplayer.library
  52.         OctaMixPlayerBase = OpenLibrary("octamixplayer.library",0);
  53.         if(!OctaMixPlayerBase) {
  54.             printf("Can't open octamixplayer.library!\n");
  55.             goto exit;
  56.         }
  57.     }
  58.     // Then allocate the player and play...
  59.     switch(play_routine) {
  60.     case 0:    // 4-channel
  61.         {
  62.             long count,midi = 0;
  63.     /* Check if it's a MIDI song. We check the MIDI channel of
  64.     each instrument. */
  65.                for(count = 0; count < 63; count++)
  66.                 if(sng->song->sample[count].midich) midi = 1;
  67.             if(GetPlayer(midi)) {
  68.                 printf("Resource allocation failed.\n");
  69.                 goto exit;
  70.             }
  71.             PlayModule(sng);
  72.         }
  73.         break;
  74.     case 1: // 5-8-channel
  75.         if(GetPlayer8()) {
  76.             printf("Resource allocation failed.\n");
  77.             goto exit;
  78.         }
  79.         PlayModule8(sng);
  80.         break;
  81.     case 2: // mixing
  82.         if(GetPlayerM()) {
  83.             printf("Resource allocation failed.\n");
  84.             goto exit;
  85.         }
  86.         PlayModuleM(sng);
  87.     }
  88.     printf("Press Ctrl-C to quit.\n");
  89.     Wait(SIGBREAKF_CTRL_C);
  90. exit:
  91.     FreePlayer();
  92.     UnLoadModule(sng);
  93.     CloseLibrary(MEDPlayerBase);
  94.     if(OctaPlayerBase) {
  95.         FreePlayer8();
  96.         CloseLibrary(OctaPlayerBase);
  97.     }
  98.     if(OctaMixPlayerBase) {
  99.         FreePlayerM();
  100.         CloseLibrary(OctaMixPlayerBase);
  101.     }
  102. }
  103.